package com.meiji.toutiao.module.news.article;

import android.os.Bundle;
import android.view.View;

import com.meiji.toutiao.Register;
import com.meiji.toutiao.bean.LoadingBean;
import com.meiji.toutiao.module.base.BaseListFragment;
import com.meiji.toutiao.util.DiffCallback;
import com.meiji.toutiao.util.OnLoadMoreListener;

import java.util.List;

import me.drakeet.multitype.Items;
import me.drakeet.multitype.MultiTypeAdapter;

/**
 * Created by Meiji on 2017/5/18.
 * 功能：新闻界面的fragment，界面
 */

public class NewsArticleView extends BaseListFragment<INewsArticle.Presenter> implements INewsArticle.View {

    private static final String TAG = "NewsArticleView";
    private String categoryId;  // get请求中的参数

    //fragment的构造方法。参数是chandId,
    public static NewsArticleView newInstance(String categoryId) {  // 实例化fragment对象的提供者
        Bundle bundle = new Bundle();
        bundle.putString(TAG, categoryId);
        NewsArticleView view = new NewsArticleView();
        view.setArguments(bundle);   // 使用fragmennt传参数
        return view;
    }

    @Override  // 初始化数据
    protected void initData() {
        categoryId = getArguments().getString(TAG);  // 推荐是个""空的
    }

    @Override
    protected void initView(View view) {    // 初始化视图
        super.initView(view);
        adapter = new MultiTypeAdapter(oldItems);  // multipe 填充数据
        Register.registerNewsArticleItem(adapter);  //  调用封装好的方法，设置adapter.
        recyclerView.setAdapter(adapter);
        recyclerView.addOnScrollListener(new OnLoadMoreListener() {  // 通过监听recycleview来自动加载更多
            @Override
            public void onLoadMore() {
                if (canLoadMore) {                             // 是否加载更多？ true
                    canLoadMore = false;
                    presenter.doLoadMoreData();              // 加载更多
                }
            }
        });
    }

    @Override
    public void fetchData() {  // 懒加载方法
        super.fetchData();
        onLoadData();
    }

    @Override
    public void onLoadData() {   // 请求数据的方法
        onShowLoading();         //  设置swipeRefreshLayout.setRefreshing(true);自动刷新
        presenter.doLoadData(categoryId);  // 请求数据
    }

    @Override
    public void onSetAdapter(final List<?> list) {   // 设置适配器的方法，
        Items newItems = new Items(list);
        newItems.add(new LoadingBean());
        DiffCallback.create(oldItems, newItems, adapter);   //调用封装好的recycleview 的diff方法更新数据
        oldItems.clear();                   // 将旧数据清空
        oldItems.addAll(newItems);        // 将新的数据，设置到旧数据中，作为旧数据
        canLoadMore = true;
        /**
         * https://medium.com/@hanru.yeh/recyclerview-and-appbarlayout-behavior-changed-in-v26-0-x-d9eb4de78fc0
         * support libraries v26 增加了 RV 惯性滑动，当 root layout 使用了 AppBarLayout Behavior 就会自动生效
         * 因此需要手动停止滑动
         */
        recyclerView.stopScroll();
    }

    @Override
    public void setPresenter(INewsArticle.Presenter presenter) {
        if (null == presenter) {  // 这个presenter是在baseFragment中定义好的变量
            this.presenter = new NewsArticlePresenter(this);    // 初始化P对象，传入当前的View
        }
    }
}
